package com.jl.commons.utils;

import java.security.MessageDigest;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
import java.util.SortedMap;

/**
 * @Desc  MD5加密工具类
 */
public class Md5Utils {

	public static void main(String[] args) {
		String pwd = getMD5LowCase("123456");
		System.out.println(pwd);
		//E10ADC3949BA59ABBE56E057F20F883E
	}

	//生成MD5
	public static String getMD5(String message) {
		String md5 = "";
		try {
			MessageDigest md = MessageDigest.getInstance("MD5");  // 创建一个md5算法对象
			byte[] messageByte = message.getBytes("UTF-8");
			byte[] md5Byte = md.digest(messageByte);              // 获得MD5字节数组,16*8=128位
			md5 = bytesToHex(md5Byte);                            // 转换为16进制字符串
		} catch (Exception e) {
			e.printStackTrace();
		}
		return md5;
	}

	public static String getMD5LowCase(String message) {
		String md5 = "";
		try {
			MessageDigest md = MessageDigest.getInstance("MD5");
			byte[] messageByte = message.getBytes("UTF-8");
			byte[] md5Byte = md.digest(messageByte);
			md5 = bytesToHex(md5Byte);
		} catch (Exception e) {
			e.printStackTrace();
		}
		return md5.toLowerCase();
	}

	// 二进制转十六进制
	public static String bytesToHex(byte[] bytes) {
		StringBuffer hexStr = new StringBuffer();
		int num;
		for (int i = 0; i < bytes.length; i++) {
			num = bytes[i];
			if(num < 0) {
				num += 256;
			}
			if(num < 16){
				hexStr.append("0");
			}
			hexStr.append(Integer.toHexString(num));
		}
		return hexStr.toString().toUpperCase();
	}
}
